package cn.buk.tms.dao;

import cn.buk.common.sc.CommonSearchCriteria;
import cn.buk.tms.sc.SearchUserCriteria;
import cn.buk.tms.entity.misc.*;

import java.util.List;
import java.util.Set;

/**
 * @author yfdai
 */
public interface UserDao {

  int PRIZE_FOR_CHECK_IN = 10;
  int MAX_PRIZE_FOR_CHECK_IN = 300;


  List<User> search(int enterpriseId, SearchUserCriteria sc, int mode);

  /**
   * 查询有多少员工账号
   */
  List<User> searchEmployees(int enterpriseId);

  User getUserById(int id);

  User getUserByUsername(String username, int enterpriseId);

  User getUserByUsername(String username, int userType, int enterpriseId);

  /**
   * 用手机号查找用户信息
   *
   * @param ownerId 当前应用id
   * @param mobile 手机号
   * @param userType 用户类型
   */
  User getUserByMobile(int ownerId, String mobile, int userType);

  User getUserByMobile(int enterpriseId, String mobile);

  /**
   * 创建新用户
   */
  int createUser(User user, String invitationCode);

  /**
   * 保存企业客户信息，并自动生成对应的用户名（用户企业可以自助服务）
   */
  int createTmcUser(int enterpriseId, User user, Customer customer);

  /**
   * 为企业员工创建登录用户名
   */
  int createPassengerUser(User user, Passenger passenger, User newUser);

  /**
   * 修改密码
   */
  int updateUserPassword(int enterpriseId, int userId, String username, String md5Password);

  /**
   * 重置密码
   */
  int updateUserPassword(int userId, String newPassword);

  /**
   * 判断该用户名在系统中是否已经存在
   */
  boolean isUsernameExisted(String username);

  /**
   * 验证该手机号是否已经被验证过
   */
  boolean isMobileVerified(String mobileNo, int userType);


  /**
   * 根据用户名查找用户
   */
  User getUserByUsername(String username);

  /**
   * 签到 100-表示签到成功 2-表示已经签到 负数表示意外
   */
  int checkIn(UserCheckIn uci);

  /**
   * 获取最近几次的签到记录
   */
  List<UserCheckIn> getTopFiveCheckIn(int enterpriseId, int times);

  List<AmountHistory> searchTransactionHistory(int enterpriseId, CommonSearchCriteria sc);

  /**
   * 增加签到奖金
   *  @param userId 增加签到奖金的用户id
   * @param continueDays 连续签到的天数
   */
  void incCheckInPrize(int ownerId, int enterpriseId, int userId, int continueDays);

  Enterprise getEnterpriseById(int id);

  void createLoginHistory(LoginHistory log);

  int createHistory(final int enterpriseId, final String username, final int functionId,
      final String remark);

  List<LoginHistory> searchHistory(int enterpriseId, String username, CommonSearchCriteria sc);

  EnterpriseBalance getEnterpriseBalance(int enterpriseId);


  /**
   * 修改用户资料
   */
  int updateUser(int enterpriseId, int id, String empname, String email, String mobileNo,
      String etermUsername, String position, Integer[] deptIds, int status);

  void updateUser(int enterpriseId, int id, User newUserInfo, int[] wwDeptIds);

  int updateCustomer(Customer c);

  /**
   * 加载用户角色
   *
   * @param userId 用户id
   */
  Set<String> loadUserRoles(int userId);

  /**
   * 根据用户所属的组来查找对应的角色权限
   */
  List<RolePrivilege> searchPrivileges(int enterpriseId, int userId);

  /**
   * 根据角色代码查找对应的角色权限
   */
  List<RolePrivilege> searchPrivilegesByRole(int enterpriseId, String role);

  /**
   * 绑定用户的企业微信userId
   */
  int updateWwUserId(int enterpriseId, int id, String userId);

  String getWwUserIdByUsername(int enterpriseId, String username);

  /**
   * 获取微信用户的绑定信息
   */
  List<UserBindWeixin> getUserBindWeixin(int ownerId, int enterpriseId, int userId);

  List<Enterprise> searchCustomerTodo(int enterpriseId);

  /**
   * 使用企业微信用户id找到TMS系统用户
   */
  User getUserByWwUserId(int enterpriseId, String userid);

  void createEtermCmdLog(int enterpriseId, int cmdType, String cmd, String openid);
  int createEtermCmdLog(int enterpriseId, String username, String title, String orderNo);

  /**
   * 重置用户密码
   */
  int resetUserPassword(int enterpriseId, String username, int userId, String md5Password);

  /**
   * 根据openid查找对应的绑定的用户
   */
  UserBindWeixin getUserByOpenid(int enterpriseId, String openid);

  int createUserBindWeixin(int ownerId, String openid, int enterpriseId, int userId, String username);

  int disableUser(int enterpriseId, String username, int userId);

  int enableUser(int enterpriseId, String username, int userId);

  int updateUserUsername(int enterpriseId, String username, int userId, String newUsername);

  int updateUserEtermUsername(int enterpriseId, String username, int userId, String etermUsername);

  int updateUserEmail(int enterpriseId, String username, int userId, String email);

  int updateUserMobile(int enterpriseId, String username, int userId, String mobile);

  List<User> searchUsersByMobile(String mobile);

  List<User> searchUsersByDepartment(int enterpriseId, int departmentId);

  void updateEtermCmdLog(int queryId, String requestStr, String responseStr);

  int createTmsTask(TmsTask tmsTask);

  int createTmsTaskLog(TmsTaskLog log);

  TmsTask getTmsTaskById(int id);

  /**
   * 解绑微信公众号用户和系统用户的关联
   */
  int unbindWeixinUser(int ownerId, String openId);

  void createTmsWwUser(TmsWwUser tmsWwUser);


}
